package com.zjsru.plan2025.oneday;

import java.util.HashMap;
import java.util.Map;

/**
 * 2364. 统计坏数对的数目
 *
 * @Author: cookLee
 * @Date: 2025-04-18
 */
public class CountBadPairs {

    /**
     * 主
     * 给你一个下标从 0 开始的整数数组 nums 。如果 i < j 且 j - i != nums[j] - nums[i] ，那么我们称 (i, j) 是一个 坏数对
     * \
     * 输入：nums = [4,1,3,3]
     * 输出：5
     * 解释：数对 (0, 1) 是坏数对，因为 1 - 0 != 1 - 4 。
     * 数对 (0, 2) 是坏数对，因为 2 - 0 != 3 - 4, 2 != -1 。
     * 数对 (0, 3) 是坏数对，因为 3 - 0 != 3 - 4, 3 != -1 。
     * 数对 (1, 2) 是坏数对，因为 2 - 1 != 3 - 1, 1 != 2 。
     * 数对 (2, 3) 是坏数对，因为 3 - 2 != 3 - 3, 1 != 0 。
     * 总共有 5 个坏数对，所以我们返回 5 。
     * \
     *
     * @param args args
     */
    public static void main(String[] args) {
        CountBadPairs countBadPairs = new CountBadPairs();
        System.out.println(countBadPairs.countBadPairs(new int[]{4, 1, 3, 3}));
    }

    public long countBadPairs(int[] nums) {
        long ans = (long) nums.length * (nums.length - 1) / 2;
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            //nums[i]−i!=nums[j]−j
            int key = nums[i] - i;
            int curr = map.getOrDefault(key, 0);
            ans -= curr;
            map.put(key, map.getOrDefault(key, 0) + 1);
        }
        return ans;
    }

}
